<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 学习数组的拓展方法 需要注意的问题?
  // 1. 每个方法的作用
  // 2. 是否影响原数组   (有些方法会操作原数组,有些方法通过操作原数组返回新数组)
  // 3. 方法的返回值 

  // slice(startIndex,endIndex) 数组的裁切  [startIndex,endIndex)      
  // (通过指定起始下标和终止下标 裁切数组中的某一段元素)
  // startIndex 起始下标(默认值0)
  // endIndex   终止下标(默认值 被裁切的数组的长度 arr.length)

  // 返回值: 被裁切的元素形成的数组
  // 是否影响原数组: 不影响

  // 常用于 
  // 1. 分页功能  [0,60)  [60,120)
  // 2. 不传参  =>  得到一个与 原数组元素相同的新数组(数组的深复制)  
  //    可以帮助我们在不影响原数组的情况下 操作数组(先复制一份 在操作)

  // 模拟封装 => 帮助理解
  // function mySlice(arr,startIndex,endIndex){

  //     // 默认值  如果不传参  startIndex默认为0
  //     startIndex = (startIndex==undefined ? 0 :startIndex);
  //     endIndex =   (endIndex==undefined ? arr.length :endIndex);

  //     var list = [];
  //     for(var i=startIndex;i<endIndex;i++){
  //         var item = arr[i];
  //         list.push(item);
  //     }
  //     return list;
  // }



  var arr = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3];
  // console.log(arr);

  // 有参数
  // var result = arr.slice(0,10);   // [0,10)  0-9
  // var result = arr.slice(10,20);  // 10-19
  // var result = arr.slice(20,30);  // 20-29
  // console.log(result);
  // console.log(arr);

  // 不传参  => 得到一个与 原数组元素相同的新数组(数组的深复制)
  var result = arr.slice();    // 默认 裁切整个数组 [0,arr.length)
  console.log(result);
  console.log(arr);


  var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3]
  var newArr1 = arr.slice(0, 3)
  console.log(newArr1);
  var newArr2 = arr.slice(3, 6)
  console.log(newArr2);
  var newArr3 = arr.slice(6, 9)
  console.log(newArr3);

  var result = arr.concat(newArr1[0], 'hello', newArr2)
  console.log(result);
  var arr = [6, 5, 4, 3, 2, 1];

  var res = arr.sort();
  console.log(res, "---", arr);
</script>

</html>